鐵人賽
React
javascript
nodejs
鐵人賽第21天,今天依舊是個被老闆追殺的一天,坦白說忙到五點才結束。
罷特...今天的鐵人賽依舊要進行,走~咱們繼續衝~!
scope
,我們在外部scope
宣告個變數outside
。inside func
,裡頭會去使用到一個變數outside
,不過,func
裡沒有outside
這個變數,他會自動往外找,並建立連結inside()
,呼叫完之後,順利顯示結果,也因為這個呼叫的inside()
不會再被使用了,JS
就會啟動回收機制。let outside = 999; //<-- 外部scope的變數
function inside(){
return outside+1; //<-- 內部scope, 但內部找不到,會往外找
}
console.log(inside()) //1000, 完成後, js的垃圾回收機制啟動
let a = 999
function doFunc(){
let b = 1
// 注意下面這個,return一個箭頭函示
return ()=>{
let result = a+b;
console.log("result is:"+result);
}
}
let myFunc = doFunc(); //<-- 注意,myFunc接收的是doFunc回傳的一個箭頭函示
myFunc(); //<-- 因為接收的是一個箭頭函示,要啟動他執行{}花括號內的內容,必須要再多加一次()
- 紅框框是一個回傳的箭頭函示,裡頭會用到:
- 藍色scopre的a
- 綠色scopre的b
null
即可,例如:myFunc = null; //<-- JS: 請支援回收
world
,開發到一半,我們發現需要在world func
回傳的訊息前面,加上hello
,這時,你就可以把閉包派上用場,就像幫他多做一層裝飾,讓它可以華麗登場。let world=()=>"world";
function sayHello(aFunc){
let result = 'hello-'+world();
// do something more here...
return ()=>result
}
let iSay = sayHello(world);
iSay(); //hello-world